package y_2025.m03.d04.t01;

import java.util.Scanner;

public class Main {

    /**
     * 获取这个数字是几位数 getDigitCount
     * @param n
     * @return
     */
    private static int getDigitCount(int n) {
        if (n == 0) return 1;
        int digits = 0;
        while (n > 0) {
            digits++;
            n /= 10;
        }
        return digits;
    }

    /**
     * 获取最高位数
     * @param n
     * @return
     */
    private static int getMax(int n) {
        // 获取位数
        int digitCount = getDigitCount(n);
        // 得到10的n-1次方
        int divisor = powerOf10(digitCount - 1);
        return n / divisor;
    }

    /**
     * 获取余数
     * @param n
     * @return
     */
    private static int getYu(int n) {
        int wei = getDigitCount(n);
        int divisor = powerOf10(wei - 1);
        return n % divisor;
    }

    private static int getZero(int m) {
        if (m == 1) return 1;
        return getZero(m - 1) + powerOf10(m - 1);
    }

    /**
     * 得到10的n次方
     * @param exponent
     * @return
     */
    private static int powerOf10(int exponent) {
        if (exponent < 0) return 0;
        int result = 1;
        for (int i = 0; i < exponent; i++) {
            result *= 10;
        }
        return result;
    }

    private static void solve(int n, int[] c) {
        // 获取n的位数
        int wei = getDigitCount(n);
        // 得到最高位
        int max = getMax(n);

        // 计算除最高位外各位数字的出现次数  0~9
        for (int i = 0; i < 10; i++) {
            // n位数中0~9每个数的次数 = n*10^(n-1)
            c[i] += max * (wei - 1) * powerOf10(wei - 2);
        }

        // 计算最高位的非最大值出现次数
        for (int i = 0; i < max; i++) {
            c[i] += powerOf10(wei - 1);
        }

        // 获取余数
        int yu = getYu(n);
        // 对最高位
        c[max] += yu + 1;

        // 处理余数部分
        // 如果xxx6000这种情况, 后面都是0, 直接加上后面3个0
        // 然后返回就行了, 没有其他情况
        if (yu == 0) {
            c[0] += wei - 1;
            return;
        }

        int len = getDigitCount(yu);
        // 存在 xxx064的情况的话, 064的前面有一个0, 考虑进去, 65个0, 后面直接传送余数
        if (len != wei - 1) {
            c[0] += (wei - len - 1) * (yu + 1);
        }

        solve(yu, c);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] counts = new int[10];
        solve(n, counts);
        int wei = getDigitCount(n);
        counts[0] -= getZero(wei);
        for (int j = 0; j < 10; j++) {
            System.out.println(counts[j]);
        }
        scanner.close();
    }
}